package io.task.message.socket.maintain;

import io.task.message.socket.ChannelContext;
import io.task.message.socket.Config;
import io.task.message.socket.spi.client.ClientConfig;

import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;


public class MaintainUtils {


    /**
     * 彻底删除，不再维护
     */
    public static void remove(ChannelContext channelContext) {
        Config config = channelContext.config;
        if (!config.isServer()) {
            ClientConfig tioClientConfig = (ClientConfig) config;
            tioClientConfig.closeds.remove(channelContext);
            tioClientConfig.connecteds.remove(channelContext);
        }

        config.connections.remove(channelContext);
        config.ips.unbind(channelContext);
        config.ids.unbind(channelContext);

        close(channelContext);
    }

    public static void close(ChannelContext channelContext) {
        Config config = channelContext.config;
        config.users.unbind(channelContext);
        config.tokens.unbind(channelContext);
        config.groups.unbind(channelContext);

        config.bsIds.unbind(channelContext);

    }


    public static Set<ChannelContext> createSet(Comparator<ChannelContext> comparator) {
        if (comparator == null) {
            return new HashSet<ChannelContext>();
        } else {
            return new TreeSet<ChannelContext>(comparator);
        }
    }


}
